package com.wv.model.system;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.wv.model.common.BaseField;
import lombok.*;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("sys_user") // MyBatis Plus 表名映射
@EqualsAndHashCode(callSuper = true)
public class SysUser extends BaseField implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId("id") // MyBatis 中指定主键
    @ExcelProperty("用户ID")
    @ColumnWidth(30)
    private String id; // ID

    @NotNull(message = "用户名不能为空")
    @Size(min = 2, max = 30, message = "长度在2-30之间")
    @ExcelProperty("用户名")
    @ColumnWidth(30)
    private String username; // 用户名

    @ExcelProperty("密码")
    @ColumnWidth(30)
    private String password; // 密码

    @ExcelProperty("盐")
    @ColumnWidth(30)
    private String salt; // 随机盐

    @NotNull(message = "姓名不能为空")
    @Size(min = 2, max = 30, message = "长度在2-30之间")
    @ExcelProperty("姓名")
    @ColumnWidth(30)
    private String realName; // 姓名

    @NotNull(message = "电话不能为空")
    @Size(min = 11, max = 11, message = "手机号格式错误")
    @ExcelProperty("电话")
    @ColumnWidth(30)
    private String phone; // 电话

    @ExcelProperty("头像")
    @ColumnWidth(30)
    private String avatar; // 头像

    @ExcelProperty("昵称")
    @ColumnWidth(30)
    private String nickName; // 昵称

    @ExcelProperty("性别")
    @ColumnWidth(30)
    private String sex; // 性别

    @NotNull(message = "身份证不能为空")
    @Size(min = 18, max = 18, message = "身份证格式错误")
    @ExcelProperty("身份证号")
    @ColumnWidth(30)
    private String idCard; // 身份证号

    @ExcelProperty("部门ID")
    @ColumnWidth(30)
    private String deptId; // 部门ID

    @ExcelProperty("删除状态")
    @ColumnWidth(30)
    private String delFlag; // 删除标志 0-正常，1-删除

    @ExcelProperty("系统标识")
    @ColumnWidth(30)
    private String sysFlag; // 系统标识: Y/N

    @ExcelProperty("微信ID")
    @ColumnWidth(30)
    private String unionId; // 微信unionId

    @ExcelProperty("备注")
    @ColumnWidth(30)
    private String remark; // 备注

    @ExcelProperty("信息是否合并")
    @ColumnWidth(30)
    private String bindFlag; // 信息是否合并: Y/N

    @ExcelProperty("证件类型")
    @ColumnWidth(30)
    private String idCardType; // 证件类型

    @ExcelProperty("用户类型")
    @ColumnWidth(30)
    private String type; // 用户类型：MOBILE-移动端，MANAGER-后端管理人员

    @ExcelProperty("注册平台")
    @ColumnWidth(30)
    private String registrationPlatform; // 注册平台

    @TableField(exist = false)
    @ExcelProperty("部门名称")
    @ColumnWidth(30)
    private String deptName;

    @TableField(exist = false)
    private List<String> roleIds;
}
